import pandas as pd
import numpy as np


def parse_ledger_balance(file_path: str) -> float:
    """
    解析明细账文件，并从摘要为“本期合计”的行中，提取其余额值。
    """
    df = None

    # --- 1. 智能读取逻辑 (保持不变) ---
    try:
        df = pd.read_excel(file_path, sheet_name='明细账', header=2)
        print("文件成功作为 Excel (.xls/.xlsx) 文件读取。")
    except Exception as excel_error:
        print(f"作为Excel文件读取失败: {excel_error}。正在尝试作为CSV文件读取...")
        encodings_to_try = ['utf-8', 'utf-8-sig', 'gbk', 'gb18030']
        for encoding in encodings_to_try:
            try:
                df = pd.read_csv(file_path, header=2, encoding=encoding, skip_blank_lines=True)
                print(f"文件成功以 {encoding} 编码的CSV格式读取。")
                break
            except (UnicodeDecodeError, pd.errors.ParserError):
                continue

    if df is None:
        raise ValueError("无法将文件作为Excel或CSV格式打开。请检查文件是否损坏，或是否存在名为'明细账'的Sheet页。")

    # --- 2. 测试逻辑 (保持不变) ---
    print("\n" + "=" * 60)
    print("--- [测试逻辑] 开始打印Pandas读取到的完整DataFrame内容 ---")
    print(df.to_string())
    print("--- [测试逻辑] 内容打印结束 ---")
    print("=" * 60 + "\n")

    # --- 3. 全新的、基于“摘要”列的提取逻辑 ---

    # a. 检查必需的'摘要'和'余额'列是否存在
    required_columns = ['摘要', '余额']
    if not all(col in df.columns for col in required_columns):
        raise ValueError(f"文件中缺少必要的列。请确保文件包含 {required_columns} 列。")

    # b. 查找'摘要'列内容精确匹配"本期合计"的行
    #    .astype(str) 保证了即使有非字符串数据，也能安全地进行字符串比较
    #    .str.strip() 用于去除单元格内容前后的多余空格，确保' 本期合计 '也能被匹配到
    target_rows = df[df['摘要'].astype(str).str.strip() == '本期合计']

    # c. 检查是否找到了该行
    if target_rows.empty:
        raise ValueError("在文件中没有找到“摘要”为“本期合计”的行。")

    # d. 提取目标行（默认取第一行）和其余额值
    target_row = target_rows.iloc[0]
    final_balance = target_row['余额']

    # e. 日志打印，显示完整的目标行内容
    print("--- [定位结果] ---")
    print("成功定位到目标行 ('摘要'为'本期合计')，该行完整内容如下:")
    # 使用to_string()将整行（一个Series对象）格式化为易读的字符串
    print(target_row.to_string())
    print(f"\n从该行提取的“余额”值为: {final_balance}")
    print("--------------------\n")

    try:
        return float(final_balance)
    except (ValueError, TypeError):
        raise ValueError(f"从“本期合计”行提取的余额值“{final_balance}”不是一个有效的数字。")